Перем юТест;

////////////////////////////////////////////////////////////////////
// Программный интерфейс

Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
	
	юТест = ЮнитТестирование;
	
	ВсеТесты = Новый Массив;
	
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИ");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИНе");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИли");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовоеИсключительноеИли");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПобитовыеСдвиги");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьУстановкуБитов");
	
	Возврат ВсеТесты;
	
КонецФункции

Процедура ТестДолжен_ПроверитьПобитовоеИ() Экспорт

	СамоеБольшоеЧисло = 4294967295;

	юТест.ПроверитьРавенство(ПобитовоеИ(4294967295, 0), 0);
	юТест.ПроверитьРавенство(ПобитовоеИ(0, 4294967295), 0);
	юТест.ПроверитьРавенство(ПобитовоеИ(1, 4294967295), 1);
	юТест.ПроверитьРавенство(ПобитовоеИ(2, 4294967295), 2);
	юТест.ПроверитьРавенство(ПобитовоеИ(7, 5), 5);
	
КонецПроцедуры

Процедура ТестДолжен_ПроверитьПобитовоеИНе() Экспорт
	
	СамоеБольшоеЧисло = 4294967295;

	юТест.ПроверитьРавенство(ПобитовоеИНе(4294967295, 0), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИНе(0, 4294967295), 0);
	юТест.ПроверитьРавенство(ПобитовоеИНе(1, 4294967295), 0);
	юТест.ПроверитьРавенство(ПобитовоеИНе(2, 4294967295), 0);
	юТест.ПроверитьРавенство(ПобитовоеИНе(7, 5), 2);
		
КонецПроцедуры

Процедура ТестДолжен_ПроверитьПобитовоеИли() Экспорт
	
	СамоеБольшоеЧисло = 4294967295;

	юТест.ПроверитьРавенство(ПобитовоеИли(4294967295, 0), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИли(0, 4294967295), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИли(1, 4294967295), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИли(2, 4294967295), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИли(7, 1), 7);
	юТест.ПроверитьРавенство(ПобитовоеИли(17, 7), 23);
	
КонецПроцедуры

Функция СдвигВлевоВызвалИсключение(Знач Число, Знач Смещение)

	Попытка

		Число = ПобитовыйСдвигВлево(Число, Смещение);

	Исключение

		Возврат Истина;

	КонецПопытки;

	Возврат Ложь;

КонецФункции

Функция СдвигВправоВызвалИсключение(Знач Число, Знач Смещение)
	
	Попытка

		Число = ПобитовыйСдвигВлево(Число, Смещение);

	Исключение

		Возврат Истина;

	КонецПопытки;

	Возврат Ложь;

КонецФункции


Процедура ТестДолжен_ПроверитьПобитовыеСдвиги() Экспорт

	юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 0), 1);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 1), 2);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 2), 4);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВлево(1, 3), 8);

	юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, 32));
	юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, 33));
	юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, -1));
	юТест.ПроверитьИстину(СдвигВлевоВызвалИсключение(1, -2));
	

	юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(1, 0), 1);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(2, 1), 1);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(3, 2), 0);
	юТест.ПроверитьРавенство(ПобитовыйСдвигВправо(8, 3), 1);

	юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, 32));
	юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, 33));
	юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, -1));
	юТест.ПроверитьИстину(СдвигВправоВызвалИсключение(1, -2));

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПобитовоеИсключительноеИли() Экспорт
	
	юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(4294967295, 0), 4294967295);
	юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(7, 1), 6);
	юТест.ПроверитьРавенство(ПобитовоеИсключительноеИли(17, 7), 22);
		
КонецПроцедуры

Процедура ТестДолжен_ПроверитьУстановкуБитов() Экспорт

	Число = 0;
	Число = УстановитьБит(Число, 0, 1);
	Число = УстановитьБит(Число, 1, 1);
	Число = УстановитьБит(Число, 2, 1);
	Число = УстановитьБит(Число, 3, 1);

	юТест.ПроверитьРавенство(Число, 15);
	
	Число = УстановитьБит(Число, 0, 0);
	юТест.ПроверитьРавенство(Число, 14);

	Число = 48;
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 1), Ложь);
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 2), Ложь);
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 3), Ложь);
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 4), Истина);
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 5), Истина);
	юТест.ПроверитьРавенство(ПроверитьБит(Число, 6), Ложь);

	юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(127, 48));
	юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(52, 48));
	юТест.ПроверитьИстину(ПроверитьПоБитовойМаске(56, 48));

	юТест.ПроверитьЛожь(ПроверитьПоБитовойМаске(33, 48));
	юТест.ПроверитьЛожь(ПроверитьПоБитовойМаске(47, 48));
	
КонецПроцедуры
